﻿using System;
using System.Text;

namespace Noria.CssTool
{
    class Logger
    {
        private static readonly ILoggerFormatter Formatter = new DefaultLoggerFormatter();

        public static void Info(string message, params object[] objs)
        {
            var msg = Formatter.Format(null, "I", message, objs);
            Console.WriteLine(msg);
        }
        public static void Error(string message, params object[] objs)
        {
            var msg = Formatter.Format(null, "E", message, objs);
            Console.ForegroundColor = ConsoleColor.Red;
            Console.WriteLine(msg);
            Console.ResetColor();
        }
        public static void Error(Exception e)
        {
            var msg = Formatter.Format(e, "E", string.Empty);
            Console.ForegroundColor = ConsoleColor.Red;
            Console.WriteLine(msg);
            Console.ResetColor();
        }
        public static void Error(Exception e, string message, params object[] objs)
        {
            var msg = Formatter.Format(e, "E", message, objs);
            Console.ForegroundColor = ConsoleColor.Red;
            Console.WriteLine(msg);
            Console.ResetColor();
        }
    }

    class DefaultLoggerFormatter : ILoggerFormatter
    {
        public string Format(Exception e, string verb, string message, params object[] objs)
        {
            var sb = new StringBuilder();

            sb.Append(DateTime.Now.ToString());
            sb.Append(" ");
            sb.Append(verb);
            sb.Append(" ");
            sb.AppendFormat(message, objs);

            if (e != null)
            {
                sb.Append(" ");
                sb.Append(e.ToString());
            }

            return sb.ToString();
        }
    }

    interface ILoggerFormatter
    {
        string Format(Exception e, string verb, string message, params object[] objs);
    }
}